#!/usr/bin/env bash
#该脚本将由linux定时任务执行
#---------------------------------------服务---------------------------------------
count=`ps -fe |grep "SWD-Master" | grep -v "grep" |wc -l`
#echo '主进程数量：'$count
log="$(date -d "today" +"%Y-%m-%d %H:%M:%S")"
if [ $count -lt 1 ]; then
    #不存在主服务
    #防止僵尸进程，可能误杀
    echo '杀死僵尸进程'
    ps -eaf |grep "SWD" | grep -v "grep"| awk '{print $2}'|xargs kill -9
    sleep 3
    ulimit -c unlimited
    #由Supervisor启动，否则Supervisor将无法监控
    #php71 /mnt/sdc/dev/www/cloud_api/bin/start_swoole_server.php start -d
    supervisorctl start SD
    log=$log' 为检测到主服务,Supervisor启动；'
else
    #线下接口地址
    #url='https://yh.cqthesis.cn/House/Issue/heartbeat'
    #线上接口地址
    url='https://rqcrm.youheone.com/House/Issue/heartbeat'
    #存在进程，进行特殊接口请求，接口超时返回：000
    status_code=$(curl -i -X POST -H "'Content-type':'application/json'" -d '{"sn":"867157049472970"}' -m 5 -s -o /dev/null -w %{http_code} $url)
    #echo '接口验证返回：'$status_code
    log=$log' 接口返回码：'$status_code' [若返回000将会重启服务]'
    if [ $status_code == '000' ]; then
        #超时了
        supervisorctl restart SD
        log=$log' 接口超时，Supervisor重启；'
        sleep 3
        /bin/sh /data/www/cloud_company/runquan/cloud_api/check_process.sh
    fi
fi

#---------------------------------------内存---------------------------------------
#系统分配的区总量
mem_total=`free -m | awk 'NR==2' | awk '{print $2}'`
#当前剩余的大小
mem_free=`free -m | awk 'NR==3' | awk '{print $4}'`
#当前已使用的used大小
mem_used=`free -m | grep Mem | awk '{print  $3}'`
#echo '总内存：'$mem_total
#echo '剩余内存：'$mem_free
#echo '已用内存：'$mem_used
if (($mem_used != 0)); then
    #如果已被使用，则计算当前剩余free所占总量的百分比，用小数来表示，要在小数点前面补一个整数位0
    mem_per=0`echo "scale=2;$mem_free/$mem_total" | bc`
    #echo '内存使用率：'$mem_per
    log=$log' 总内存：'$mem_total' 剩余内存：'$mem_free' 已用内存：'$mem_used
    #设置的告警值为20%(即使用超过80%的时候告警)。
    mem_warn=0.20
    log=$log' 空闲指数：'$mem_per' [小于 '$mem_warn' 将释放内存]'
    #当前剩余百分比与告警值进行比较（当大于告警值(即剩余20%以上)时会返回1，小于(即剩余不足20%)时会返回0 ）
    mem_now=`expr $mem_per \> $mem_warn`

    #如果当前使用超过80%（即剩余小于20%，上面的返回值等于0），释放内存
    if (($mem_now == 0)); then
        #将缓存落地到磁盘上
        sync
        #清空缓存
        echo 3 > /proc/sys/vm/drop_caches
    fi
fi
echo $log >> /var/log/check_server.log